package org.example.ba04;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;

/*@Aspect :  该注解是aspect中的注解，表示该类是切面类
*           切面类：用来给目标方法增加功能的类，在该类中有切面代码*/
@Aspect
public class MyAspect {
    /*
    * 异常通知的方法定义格式
    * 1.public
    * 2.没有返回值
    * 3.方法名称自定义
    * 4.方法可以有参数Exception，如果还有   是JoinPoint */

    /*@AfterThrowing 属性：
    * 1.value
    * 2.throwing  自定义变量  表示目标方法抛出的异常对象
    *   变量名必须和方法的参数名称一样
    * 特点：在目标方法抛出异常时执行的，
    * 可以做异常的监控程序  ，监控目标方法在执行时是否有异常*/

    /*try   catch*/
    @AfterThrowing(value = "execution(* *..*.doSecond(..))",throwing = "ex")
    public void myAfterThrowing(JoinPoint jp,Exception ex){
        System.out.println("异常通知：目标方法出现异常时执行"+ex.getMessage());

    }
}
